#ifndef _CONTACT_H_
#define _CONTACT_H_
#include "seqlist.h"
#include "msgqueue.h"

/*
    参数：用户信息
    功能：向进程B获取用户的联系人列表
    返回值：成功：联系人列表空间地址，失败: NULL
*/
PSeqListType  InitContactTable(PUserType pUser);

//
/*
	参数：通信录的地址空间
    功能：联系人资源释放
    返回值：成功：联系人列表空间地址，失败: NULL
*/
void ContactFree(PSeqListType* pContactList);

/*
	功能：向通讯录中添加联系人
	参数：pContact	通讯录在内存中的地址,非空NULL
		 data	   添加的联系人
	返回值：添加是否成功，成功返回0，失败返回-1
*/
int InsertIntoContacts(PUserType pUser, PSeqListType pContactList, PElementType pData);

/*
	功能：在通讯录中查询联系人
	参数：
        userId           联系人电话
	返回值：存在 联系人下标, 不存在 -1
*/
int IsContactExistByPhone(PSeqListType pContactList, lType userId);

/*
	功能：在通讯录中删除联系人
	参数：
		pContactList		通讯录空间地址
        pContact           联系人信息空间地址
	返回值：删除是否成功，成功返回1，失败返回-1
*/
int DeleteContacts(PSeqListType pContactList, PContactType pContact);

/*
	参数：
		pContactList	通讯录在内存中的地址,非空NULL
		name 			联系人姓名
	功能：根据姓名在通信录中查找联系人
	返回值：联系人下标
*/
int IsContactExistByName(PSeqListType pContactList, const char*name);

/*
	参数：
		pContactList	通讯录在内存中的地址,非空NULL
		name 			联系人姓名
	功能：根据姓名在通信录中显示联系人
*/
void ShowContactByName(PSeqListType pContactList, const char*name);

/*
	功能：向通讯录中修改联系人
	参数：pContact	通讯录在内存中的地址,非空NULL
		 data	   修改的联系人
	返回值：修改是否成功，成功返回0，失败返回-1
*/
int ModifyContacts(PSeqListType pContactList, PElementType pData);

/*
	功能：在通讯录中清空联系人
	参数：
        pUser           用户信息空间地址
        pContactList	通讯录在内存中的地址,非空NULL
	返回值：
        -1 程序异常
        0  清空成功
*/
int ClearContact(PUserType pUser, PSeqListType pContactList);

/*                    Server                      */
/*
    pContactTable 联系人信息表空间地址
    功能：将联系人信息表保存到文件中
*/
void SaveContactTable(PSeqListType pContactTable);
/*
    功能：从文件中载入联系人信息表
    返回值：成功：联系人信息表空间地址，失败: NULL
*/
PSeqListType LoadContactTable();

// 获取该用户所有存在的联系人返回进程A
void GetContactList(long userId, const PSeqListType pContactTable);

// 添加联系人信息（向数组中添加信息）
// 添加成功 0 ，添加失败 -1
int AddContact(long userId, PSeqListType pContactTable, PContactType pData);

// 删除联系人信息（向数组中添加信息）
// 删除成功 0 ，删除异常 -1 删除失败 1
int DeleteContact(PSeqListType pContactTable, PContactType pData);

// 修改联系人信息
//-1 程序异常
// 0  添加成功
int ChangeContact(PSeqListType pContactTable , PContactType pData);

/*
	功能：清空联系人
	参数：
        pContactTable	联系人表信息的地址,非空NULL
        pUser           用户信息空间地址
	返回值：
        -1 程序异常
        0  清空成功
*/
int CleanContact(PSeqListType pContactTable , PUserType pUser);
#endif